1
PyTorch入门:为何张量至关重要
EvoClass-AI002第1讲
00:00

PyTorch入门:为何张量至关重要

PyTorch 是一个高度灵活、动态的开源框架,广受深度学习研究和快速原型开发的青睐。其核心是 张量,它是不可或缺的数据结构。它是一种多维数组,专为高效处理深度学习模型所需的数值运算而设计,并支持自动的 GPU加速

1. 理解张量结构

在 PyTorch 中,每一个输入、输出和模型参数都封装在张量中。它们的作用与 NumPy 数组相同,但针对专用硬件(如 GPU)进行了优化,使其在执行神经网络所需的大型线性代数运算时效率更高。

张量的关键属性包括:

  • 形状:定义数据的维度,以元组形式表示(例如,一批图像的形状为 $4 \times 32 \times 32$)。
  • 数据类型:指定存储元素的数值类型(例如,模型权重使用 torch.float32,索引操作使用 torch.int64)。
  • 设备:指示物理硬件位置,通常是 'cpu''cuda'(NVIDIA GPU)。
动态图与自动求导
PyTorch 使用命令式执行模型,意味着计算图是在操作执行过程中逐步构建的。这使得内置的自动微分引擎 Autograd 可以跟踪张量上的每一步操作,前提是设置了属性 requires_grad=True。这使得反向传播过程中梯度的计算变得非常简单。
fundamentals.py
终端bash — pytorch-env
> 准备就绪。点击“运行”开始执行。
>
张量检查器实时

运行代码以检查活跃的张量
问题 1
哪个命令可以创建一个包含服从 0 到 1 之间均匀分布随机数的 $5 \times 5$ 张量?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
问题 2
如果张量 $A$ 在 CPU 上,而张量 $B$ 在 CUDA 设备上,尝试计算 $A + B$ 会发生什么?
会报错,因为操作要求所有张量必须位于同一设备上。
PyTorch 会自动将 $A$ 移动到 CUDA 设备并继续执行。
操作在 CPU 上进行,结果返回到 CPU。
问题 3
深度学习中,模型权重和中间计算最常用的数据类型(dtype)是什么?
torch.float32(单精度浮点)
torch.int64(长整型)
torch.bool
torch.float64(双精度浮点)
挑战:张量操作与形状
为特定矩阵运算准备张量。
你有一个形状为 $(10,)$ 的特征向量 $F$。你需要将其乘以一个形状为 $(10, 5)$ 的权重矩阵 $W$。为了使矩阵乘法(MatMul)成功,$F$ 必须是二维的。
步骤 1
在与 $W$ 相乘之前,$F$ 的形状应为何?
解答:
内部维度必须匹配,因此 $F$ 必须是 $(1, 10)$。然后 $(1, 10) @ (10, 5) \rightarrow (1, 5)$。
代码:F_new = F.unsqueeze(0)F_new = F.view(1, -1)
步骤 2
对 $F_{new}$ 和 $W$(形状为 $(10, 5)$)执行矩阵乘法。
解答:
操作很简单,就是标准的矩阵乘法。
代码:output = F_new @ Woutput = torch.matmul(F_new, W)
步骤 3
哪种方法能显式返回具有指定维度的张量,从而允许你将张量展平回 $(50,)$?(假设 $F$ 最初是 $(5, 10)$,现在已被展平。)
解答:
使用 viewreshape 方法。最快展平方式通常是使用 -1 来表示一个维度。
代码:F_flat = F.view(-1)F_flat = F.reshape(50)